/*
 * main.c
 *
 * $Revision: 1.4 $
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "decl.h"
#include "getopt.h"
#include "version.h"

/****************************************
  変数いろいろ
****************************************/
char *progname;			/* プログラム名 */
static boolean version = FALSE;	/* バージョン表示 */
static boolean help = FALSE;	/* オプション説明表示 */
boolean verbose = FALSE;	/* たくさんしゃべり */
boolean outf = FALSE;		/* 出力ファイル指定 */
char *outfile = NULL;		/* 出力ファイル名 */
char *infile = NULL;		/* 入力ファイル名 */
boolean labelf = FALSE;		/* ラベル出力あり */
char *glabel = NULL;		/* 出力ラベル名 */

/****************************************
  バージョン表示
****************************************/
void
showver()
{
    char *p = strdup(progname);
    
    fprintf(stderr, "%s Music Macro Compiler Version " VERSION " (C)1996 HUDSON SOFT\n", my_strupr(p));
}

/****************************************
  オプション説明表示
****************************************/
void
showopt()
{
    fprintf(stderr,
	    "\t-h          show this help\n"
	    "\t-V          show version\n"
	    "\t-v          verbose mode\n"
	    "\t-t label    suggest global label\n"
	    "\t-o filename suggest output filename(default 'stdout')\n"
	    );
}

/****************************************
  使用法表示
****************************************/
volatile void
usage()
{
    fprintf(stderr, "Usage: %s [-hvV] [-o outfile] [-t label] <mml file>\n", progname);
    if (help)
      showopt();
    exit(EXIT_FAILURE);
}

/****************************************
  メイン
****************************************/
void
main(int argc, char *argv[])
{
    int c;

    progname = basename(argv[0]);

    while ((c = getopt(argc, argv, "ht:vVco:")) != EOF) {
	switch (c) {
	  case 'v':
	    verbose = TRUE;
	    break;
	  case 'V':
	    version = TRUE;
	    break;
	  case 't':
	    labelf = TRUE;
	    glabel = optarg;
	    break;
	  case 'c':
	    break;
	  case 'o':
	    outf = TRUE;
	    outfile = optarg;
	    break;
	  case 'h':
	    /* THROUGH */
	  default:
	    help = TRUE;
	    break;
	}
    }

    if (version) {
	showver();
	if (argc == optind)
	  exit(EXIT_FAILURE);
    }
    if (argc == optind || help)
      usage();

    infile = argv[optind];
    dump();

    exit(EXIT_SUCCESS);
}
